using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Decisions.HL7.Message;
using DecisionsFramework;

namespace Decisions.HL7.Message
{
    public class CommandResponseAttribute:RuleAttribute
    {
        private Dictionary<HL7Version, string[]> validVersionCodes = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, string[]> validVersionDescriptions = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, HL7TableType> tableVersionTypes = new Dictionary<HL7Version, HL7TableType>();

        public CommandResponseAttribute()
        {
            // init the values for table version types
						tableVersionTypes[HL7Version.v24] = HL7TableType.HL7;
						tableVersionTypes[HL7Version.v25] = HL7TableType.User;
						tableVersionTypes[HL7Version.v251] = HL7TableType.User;
						tableVersionTypes[HL7Version.v26] = HL7TableType.User;
						tableVersionTypes[HL7Version.v27] = HL7TableType.User;
			
            
			// init the values for version codes
						validVersionCodes[HL7Version.v24] = new string[]{"OK","TI","ER","ST","UN"};
						validVersionCodes[HL7Version.v25] = new string[]{"OK","TI","ER","ST","UN"};
						validVersionCodes[HL7Version.v251] = new string[]{"OK","TI","ER","ST","UN"};
						validVersionCodes[HL7Version.v26] = new string[]{"OK","TI","ER","ST","UN"};
						validVersionCodes[HL7Version.v27] = new string[]{"OK","TI","ER","ST","UN"};
			
			// init the values for version descriptions
						validVersionDescriptions[HL7Version.v24] = new string[]{"Command completed successfully","Command cannot be completed within requested completion time","Command cannot be completed because of error condition (see response parameters)","Command cannot be completed because of the status of the requested equipment","Command cannot be completed for unknown reasons"};
						validVersionDescriptions[HL7Version.v25] = new string[]{"Command completed successfully","Command cannot be completed within requested completion time","Command cannot be completed because of error condition","Command cannot be completed because of the status of the requested equipment","Command cannot be completed for unknown reasons"};
						validVersionDescriptions[HL7Version.v251] = new string[]{"Command completed successfully","Command cannot be completed within requested completion time","Command cannot be completed because of error condition","Command cannot be completed because of the status of the requested equipment","Command cannot be completed for unknown reasons"};
						validVersionDescriptions[HL7Version.v26] = new string[]{"Command completed successfully","Command cannot be completed within requested completion time","Command cannot be completed because of error condition","Command cannot be completed because of the status of the requested equipment","Command cannot be completed for unknown reasons"};
						validVersionDescriptions[HL7Version.v27] = new string[]{"Command completed successfully","Command cannot be completed within requested completion time","Command cannot be completed because of error condition","Command cannot be completed because of the status of the requested equipment","Command cannot be completed for unknown reasons"};
			            

        }

        
        public override ValidationIssue[] RunRule(string name, object owningObject, object value)
        {
            //todo: check if the value is valid in the current version
            //if the value is not valid in the current version, add it as a validation issue


            return new ValidationIssue[0];
        }
    }
}
